"""
Copyright © 2021 Walkline Wang (https://walkline.wang)
Gitee: https://gitee.com/walkline/micropython-espnow-practice-gui
"""
from framebuf import MONO_VLSB


class FontData(object):
	FORMAT = MONO_VLSB
	ICON_RIGHT = '\ue642'
	ICON_WRONG = '\ue641'
	ICON_ON = '\ue644'
	ICON_OFF = '\ue643'
	ICON_GROUP = '\ue645'
	ICON_CLIENT_1 = '\ue631'
	ICON_CLIENT_2 = '\ue632'
	ICON_CLIENT_3 = '\ue633'
	ICON_CLIENT_4 = '\ue634'
	ICON_CLIENT_5 = '\ue635'
	ICON_CLIENT_6 = '\ue636'
	ICON_CLIENTS = [ICON_CLIENT_1, ICON_CLIENT_2, ICON_CLIENT_3, ICON_CLIENT_4, ICON_CLIENT_5, ICON_CLIENT_6]
	FONT_WIDTH = 20
	FONT_HEIGHT = 20

	__DATA_DICT = {
		'0': memoryview(b'\x00\xe08\x08\x88x\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f<FA0\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'1': memoryview(b'\x00 \x10\x18\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'2': memoryview(b'\x00\x10\x08\x08\x08\xf8`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`pXFC@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'3': memoryview(b'\x00\x08\x08\xc8h8\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 aAA7\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'4': memoryview(b'\x00\x00\x80\xe08\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\t\x08\x08\x7f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'5': memoryview(b'\x00\x00\xf8\x88\x88\x08\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 aAA3\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'6': memoryview(b'\x00\xc0\xf0\x88\x88\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f3@@a?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'7': memoryview(b'\x00\x08\x08\x08\x88\xf8\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`>\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'8': memoryview(b'\x00p\x98\x08\x08\x98p\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00<bAAb>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'9': memoryview(b'\x00\xf0\x18\x08\x088\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#FDd?\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),

		'?': memoryview(b'\x00\x18\x08\x08\x08\x98p\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00fc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'a': memoryview(b'\x00\x80\xc0@@\xc0\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x008dBB2\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'd': memoryview(b'\x00\x80\xc0@\xc0\x80\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?`@@1\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'e': memoryview(b"\x00\x00\x80@@\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f$DDD'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
		'l': memoryview(b'\x00\x08\x08\xf8\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\x7f@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'n': memoryview(b'\x00\xc0\x80\xc0@\xc0\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'o': memoryview(b'\x00\x80\x80@@\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?`@@`?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'r': memoryview(b'\x00\x00\xc0\x80\x80@\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		't': memoryview(b'\x00\x80\x80\xf0\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f@@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'C': memoryview(b'\x00\xe00\x08\x08\x08\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f0`@@`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'L': memoryview(b'\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f@@@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		'P': memoryview(b'\x00\xf8\xf8\x08\x08\x18\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x7f\x02\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),

		ICON_WRONG: memoryview(b'\x00\x00\x00\x80\xe0\xc0\x80\x00\x00\x00\x00\x00\x80\xe0\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xc3\xe7\x7f><~\xf7\xe3\xc1\x80\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x01\x00\x00\x00\x00\x00\x00\x01\x03\x01\x00\x00\x00\x00\x00'),
		ICON_RIGHT: memoryview(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x08\x08\x10 @\x80@ \x10\x08\x04\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		ICON_ON: memoryview(b'\x00\x00\x00@@\x00\x00\x80\xb0\x80\x80\x00\x00@@\x00\x00\x00\x00\x00\x00\x08\x08\x00\x8c2A\x80\x80\x80\x80A>\x80\x00\x08\x08\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00'),
		ICON_OFF: memoryview(b'\x00\x00\x00\x00\x80@ \xd0 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x80\x00\x00\x07\x18 @@\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x02\x02\x02\x02\x02\x02\x01\x00\x00\x00\x00\x00\x00'),
		ICON_GROUP: memoryview(b'\x00\x00\x00\x00\x00\x008D\x84\x84\x88p\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x98\x97\xf1\x01\xf1\x91\x91\xf1\x01\xf1\x9f\x90\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),

		ICON_CLIENT_1: memoryview(b'\x00\x00\x00\x00\x00\x00\x00 0\xd0\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'),
		ICON_CLIENT_2: memoryview(b'\x00\x00\x00\x00\x00\x00 00000\xe0@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf08\x0c\x0c\x0c\x0c\x08\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x02\x02\x02\x02\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00'),
		ICON_CLIENT_3: memoryview(b'\x00\x00\x00\x00\x00\x00 0000\xf0\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x0c\x0c\x0c\x0c\xff\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x02\x02\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00'),
		ICON_CLIENT_4: memoryview(b'\x00\x00\x00\x00\x00\xf0\xe0\x00\x00\x00\x00\xe0\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x0b\x0c\x0c\x0c\x0c\xf7\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00'),
		ICON_CLIENT_5: memoryview(b'\x00\x00\x00\x00\x00\xe0\xd000000 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x0b\x0c\x0c\x0c\x0c\xf8\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x02\x02\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00'),
		ICON_CLIENT_6: memoryview(b'\x00\x00\x00\x00\x00\x00\xe000000 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xf7\x0c\x0c\x0c\x0c\xec\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x02\x02\x02\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00'),
	}

	def __len__(self):
		return len(self.__DATA_DICT)

	def __init__(self):
		self.__place_holder = FontData.__DATA_DICT.get('?')

	@property
	def availables(self):
		return list(FontData.__DATA_DICT.keys())

	def get_buffer(self, unicode_or_char):
		if isinstance(unicode_or_char, int):
			unicode_or_char = chr(unicode_or_char)

		return FontData.__DATA_DICT.get(unicode_or_char, self.__place_holder)
